/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-10-17
 * Time: 22:15
 */
public class Solution {
    public int findMinimum(int n, int[] left, int[] right) {
        // write code here
        int leftSum = 0;
        int rightSum = 0;
//         同样因为要保证一定有成对的
//         那么最后要减去的是 最少的那个, 而不是最多的那个
        int leftMin = Integer.MAX_VALUE; // 注意这里面要记录的是最小值
        int rightMin = Integer.MAX_VALUE;
        int ans = 0;
        for (int i = 0; i < n; i++) {
//             因为要保证一定有一对的, 那么 只要有左、右有其中一个为 0, 都需要把对方加上
//             因为这种颜色是不可能配对成功的
            if (left[i] == 0 || right[i] == 0) {
                ans += left[i] + right[i];
            } else {
//                 因为 只要是 0 个的都要加上, 那么就单独计算了
//                 此时 leftSum 和 rightSum 就不用计算了
                leftMin = Math.min(leftMin, left[i]);
                rightMin = Math.min(rightMin, right[i]);
                leftSum += left[i];
                rightSum += right[i];
            }
        }
//         最后的 + 2 是将左手或者右手其中一个全选, 减去其中数目最少的
//         然后最少的这个颜色取一个, 然后在另一个手中取一个
        return ans + Math.min(leftSum-leftMin, rightSum-rightMin) + 2;
    }
}